#include<iostream>
#include<mutex>

class Singleton{
  private:
    int _data = 10;
    static std::mutex _mutex;//定义一把锁
    static Singleton* _eton;//定义一个指针
  private:
    Singleton(){}
  public:
    int get_data(){
      return _data;
    }
    static Singleton* GetInstance(){
      if(_eton == NULL){ //这个判断是为了第一次申请空间成功后，不用再次加锁解锁，提高效率
         _mutex.lock();                                                                     
         if(_eton == NULL){     //判空之前要先加锁，避免同一时间申请多个对象                                                                    
            _eton = new Singleton();
         }
          _mutex.unlock();
      }
      return _eton;
    }
};
Singleton* Singleton::_eton = NULL;
std::mutex Singleton::_mutex;

int main()
{
  std::cout<<Singleton::GetInstance()->get_data()<<std::endl;
  return 0;
}
